﻿using System;
// 委托变量动态指定调用的方法。这个特性对于编写插入式方法非常有用。
namespace _081_用委托下插入式方法
{
    //本例中有一个名为Transform的公共方法，它对整型数组的每个元素进行变换。
    //为了指定插入式变换，Transform方法定义了一个委托参数。
    public delegate int Transformer(int x);
    class Util
    {
        public static void Transform(int[] values, Transformer t)
        {
            for (int i = 0; i < values.Length; i++)
            {
                values[i] = t(values[i]);
            }
        }
    }
    class Test
    {
        static int Square(int x) { return x * x; }
        static void Main(string[] args)
        {
            int[] values = { 1, 2, 3 };
            Util.Transform(values, Square); // 动态挂接到Square函数
            foreach (int i in values)
            {
                Console.Write(i + " "); // 1 4 9
            }

            Console.ReadKey();
        }
    }
}